/*
 * @Author: anshengtyp
 * @Date: 2024-03-27 16:35:22
 * @LastEditTime: 2025-02-19 09:45:23
 * @LastEditors: typ
 * @Description: 
 */
import { defineConfig, loadEnv } from 'vite'
import createVitePlugins from './vite/plugins'
import postcsspxtoviewport from 'postcss-px-to-viewport'
import path from 'path'
export default defineConfig(({ mode, command }) => {
  const env = loadEnv(mode, process.cwd());
  const { VITE_APP_ENV, VITE_APP_SERVER_IP, VITE_APP_PIC_BASE_IP } = env;
  return {
    base: VITE_APP_ENV === 'production' ? '/' : '/',
    plugins: createVitePlugins(env, command === 'build'),
    resolve: {
      alias: {
        // 设置路径
        '~': path.resolve(__dirname, './'),
        // 设置别名
        '@': path.resolve(__dirname, './src')
      },
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
    },
    server: {
      port: 8081,
      host: true,
      open: false,
      proxy: {
        '/dev-api': {
          target: VITE_APP_SERVER_IP,
          changeOrigin: true,
          rewrite: (p) => p.replace(/^\/dev-api/, '')
        },
        '/prod-api': {
          target: VITE_APP_SERVER_IP,
          changeOrigin: true,
          rewrite: (p) => p.replace(/^\/prod-api/, '')
        },
        '/qjyx': {
          target: VITE_APP_PIC_BASE_IP,
          changeOrigin: true,
        },
        '/3d-model': {
          target: 'http://218.76.44.242:8082/',
          changeOrigin: true,
        },
      }
    },
    css: {
      postcss: {
        plugins: [
          postcsspxtoviewport({
            // 要转化的单位
            unitToConvert: 'px',
            // UI设计稿的大小
            viewportWidth: 1920,
            // 转换后的精度
            unitPrecision: 6,
            // 转换后的单位
            viewportUnit: 'vw',
            // 字体转换后的单位
            fontViewportUnit: 'vw',
            // 能转换的属性，*表示所有属性，!border表示border不转
            propList: ['*'],
            // 指定不转换为视窗单位的类名，
            selectorBlackList: ['ignore-'],
            // 最小转换的值，小于等于1不转
            minPixelValue: 10,
            // 是否在媒体查询的css代码中也进行转换，默认false
            mediaQuery: false,
            // 是否转换后直接更换属性值
            replace: true,
            // 忽略某些文件夹下的文件或特定文件，例如 'node_modules' 下的文件
            exclude: [],
            // 包含那些文件或者特定文件
            include: [],
            // 是否处理横屏情况
            landscape: false
          }),
        ]
      }
    }
  }
})
